/*
  勾股数
  题目描述
    勾股数是很有趣的数学概念。
    如果三个正整数 a, b, c，满足 a^2 + b^2 = c^2，而且 1 ≤ a ≤ b ≤ c，
    我们就将 a, b, c 组成的三元组 (a, b, c) 称为勾股数。
    你能通过编程，数数有多少组勾股数，能够满足 c ≤ n 吗？
  输入格式
    输入一行，包含一个正整数 n。约定 1 ≤ n ≤ 1000。
  输出格式
    输出一行，包含一个整数 C，表示有 C 组满足条件的勾股数。
  输入输出样例
    输入 #1
      5
    输出 #1
      1
    输入 #2
      13
    输出 #2
      3
  说明/提示
   【样例解释 1】
      满足 c ≤ 5 的勾股数只有 (3, 4, 5) 一组。
   【样例解释 2】
      满足 c ≤ 13 的勾股数有 3 组，即 (3, 4, 5)、(6, 8, 10) 和 (5, 12, 13)。
*/

#include <bits/stdc++.h>

using namespace std;

int main() {
    int n;
    cin >> n;
    int num = 0;
    for (int i = 1; i <= n; i++) {
        for (int j = i; j <= n; j++) {
            /*
              注意:
                由于题目中 a、b 和 c 之间有等式关系，即当前代码实现中的 i、j 和 b 有等式关系!
                所以当我们对 i 和 j 进行暴力枚举时，没有必要再对 b 进行枚举，而是直接利用等式计算出 b！
                这样可以减少一层循环，避免循环超时!
            */
            int k = i * i + j * j;
            int b = sqrt(k); /* 注意: sqrt() 的返回值为 double 类型，向 b 赋值后，b * b 的值有可能小于 k */
            if (b <= n && b * b == k) {
                if (b >= j) {
                    num++;
                }
            }
        }
    }
    cout << num;

    return 0;
}